package com.huawei.tree.AVL;

//测试类
public class Test {
    public static void main(String[] args) {
        //           4
        //          / \
        //         3   6
        //            / \
        //           5   8
        //              /
        //             7
        int[] array1 = {4,3,6,5,8,7};

        //创建一个AVL对象
        AVL avl1 = new AVL();
        //添加节点
        for (int j : array1) {
            avl1.add(new Node(j));
        }

        //中序遍历
        System.out.println("中序遍历");
        avl1.midOrder();

        //没有做平衡处理之前
//        System.out.println("平衡处理前...");
//        System.out.println("树的高度=" + avl.getRoot().height());
//        System.out.println("树的左子树的高度=" + avl.getRoot().leftHeight());
//        System.out.println("树的右子树的高度=" + avl.getRoot().rightHeight());
        //平衡处理之后
        System.out.println("平衡处理后...");
        System.out.println("当前根节点：" + avl1.getRoot().value);
        System.out.println("树的高度=" + avl1.getRoot().height());
        System.out.println("树的左子树的高度=" + avl1.getRoot().leftHeight());
        System.out.println("树的右子树的高度=" + avl1.getRoot().rightHeight());
        TreeOperation.show(avl1.getRoot());

        System.out.println("################################################################################################################################################");
        //           11
        //          /  \
        //         8   12
        //        / \
        //       7   9
        //      /
        //     6
        int[] array2 = {10,12,8,9,7,6};

        //创建一个AVL对象
        AVL avl2 = new AVL();
        //添加节点
        for (int j : array2) {
            avl2.add(new Node(j));
        }

        //中序遍历
        System.out.println("中序遍历");
        avl2.midOrder();

        //平衡处理之后
        System.out.println("平衡处理后...");
        System.out.println("当前根节点：" + avl2.getRoot().value);
        System.out.println("树的高度=" + avl2.getRoot().height());
        System.out.println("树的左子树的高度=" + avl2.getRoot().leftHeight());
        System.out.println("树的右子树的高度=" + avl2.getRoot().rightHeight());
        TreeOperation.show(avl2.getRoot());

        System.out.println("################################################################################################################################################");
        //              10
        //             /  \
        //            7   11
        //           / \
        //          6   8
        //               \
        //                9
        int[] array3 = {10,11,7,6,8,9};

        //创建一个AVL对象
        AVL avl3 = new AVL();
        //添加节点
        for (int j : array3) {
            avl3.add(new Node(j));
        }

        //中序遍历
        System.out.println("中序遍历");
        avl3.midOrder();

        //平衡处理之后
        System.out.println("平衡处理后...");
        System.out.println("当前根节点：" + avl3.getRoot().value);
        System.out.println("树的高度=" + avl3.getRoot().height());
        System.out.println("树的左子树的高度=" + avl3.getRoot().leftHeight());
        System.out.println("树的右子树的高度=" + avl3.getRoot().rightHeight());
        TreeOperation.show(avl3.getRoot());

        System.out.println("################################################################################################################################################");
        //              10
        //             /  \
        //            7   15
        //                / \
        //               12 16
        //              /
        //             11
        int[] array4 = {10,7,15,16,12,11};

        //创建一个AVL对象
        AVL avl4 = new AVL();
        //添加节点
        for (int j : array4) {
            avl4.add(new Node(j));
        }

        //中序遍历
        System.out.println("中序遍历");
        avl4.midOrder();

        //平衡处理之后
        System.out.println("平衡处理后...");
        System.out.println("当前根节点：" + avl4.getRoot().value);
        System.out.println("树的高度=" + avl4.getRoot().height());
        System.out.println("树的左子树的高度=" + avl4.getRoot().leftHeight());
        System.out.println("树的右子树的高度=" + avl4.getRoot().rightHeight());
        TreeOperation.show(avl4.getRoot());

        System.out.println("################################################################################################################################################");
        //                                                   1   6
        //                                          /                      \
        //                                         8                       24
        //                                      /     \              /              \
        //                                     4      12            20              28
        //                                           /   \        /    \          /     \
        //                                          10   14      18    22       26      30
        //                                          /           /  \   / \     / \     /  \
        //                                         9           17  19 21  23  25  27  29   31
        //                                                                                   \
        //                                                                                   32
        //
        int[] array5 = {16,8,4,12,10,9,14,24,20,28,18,22,26,30,17,19,21,23,25,27,29,31,32};

        //创建一个AVL对象
        AVL avl5 = new AVL();
        //添加节点
        for (int j : array5) {
            avl5.add(new Node(j));
        }

        //中序遍历
        System.out.println("中序遍历");
        avl5.midOrder();

        //平衡处理之后
        System.out.println("平衡处理后...");
        System.out.println("当前根节点：" + avl5.getRoot().value);
        System.out.println("树的高度=" + avl5.getRoot().height());
        System.out.println("树的左子树的高度=" + avl5.getRoot().leftHeight());
        System.out.println("树的右子树的高度=" + avl5.getRoot().rightHeight());
        TreeOperation.show(avl5.getRoot());
    }
}
